VDMA学习(一)pg020总结 您所在的位置:网站首页 xilinx vdma 循环 VDMA学习(一)pg020总结

VDMA学习(一)pg020总结

2023-09-29 06:30| 来源: 网络整理| 查看: 265

1.概况 1.1 VDMA系统框图

VDMA框图 通过AXI4-Lite接口对寄存器进行配置后,控制/状态逻辑模块会向DataMover生成适当的命令以启动写入和读取。Line Buffer则用于将像素数据写出到AXI4-Memory Map接口以及临时保存AXI4-Stream接口传入的像素数据。写入和读取路径均独立运行。VDMA还提供了将输入/输出帧与外部同步信号同步的选项。

1.2 需要注意的一些功能 AXI4数据宽度 AXI VDMA内核支持32、64、128、256、512和1,024位的主要AXI4数据总线宽度。AXI4-流数据宽度 AXI VDMA内核支持8位的整数倍至1,024位的主要AXI4-Stream数据总线宽度。AXI4-Stream数据宽度必须小于或等于相应通道的AXI4数据宽度。数据重组 AXI VDMA内核支持可选的数据重新排列引擎(DRE)。DRE让对内存的未对齐访问,从而允许帧缓冲区从内存中的任何地址开始。对hsize和stride也没有限制。最多64位的AXI4-Stream接口宽度支持此功能。同步锁相异步通道 AXI VDMA内核支持AXI4-Lite,S2MM的异步时钟域AXI4-Stream接口,内存映射到流(MM2S)AXI4-Stream接口,流到内存映射(S2MM)AXI4接口和MM2S AXI4接口。帧同步选项AXI4-Stream接口上的动态时钟频率变化 AXI VDMA内核允许动态更改AXI4-Stream接口时钟,以支持不同的视频帧分辨率和帧速率。帧前进或出现错误时重复 当在特定帧中检测到任何帧或行错误时,此可选功能使您可以让帧编号在下一帧同步时前进或不前进,并重新使用错误的帧号。垂直翻转 AXI VDMA内核支持使用S2MM作为路径的垂直翻转并启用垂直翻转采用Little EndianVDMA最大频率VDMA最大频率VDMA吞吐量VDMA吞吐量 1.3 时序图

读时序 写时序

1.4 配置寄存器

在这里插入图片描述 在这里插入图片描述

2 Genlock同步

在许多视频应用程序中,视频数据输入速度与读取速度不同。为了避免可能导致速率不匹配的潜在不良影响,经常使用帧缓冲。数据写入一个缓冲区,而读取操作在另一个缓冲区进行。而VDMA的Genlock可防止读取和写入通道同时访问同一帧。 AXI VDMA支持四种模式的Genlock同步:Genlock Master,Genlock Slave,Dynamic Genlock Master和Dynamic Genlock Slave。 在这里插入图片描述

Genlock Master 配置为Genlock Master时,该通道不会跳过或重复帧。Genlock Slave应该跟随Genlock Master在其中设置一个预定的帧延迟值*frmdly_stride [28:24]。Genlock Slave 配置为Genlock Slave时,该通道尝试通过跳过或重复帧来追赶Genlock Master。通过获取Genlock Master帧编号,并根据其预定帧延迟值进行操作。要在Genlock Slave模式下设置通道,应使用以下设置: a. 设置GenlockEn(MM2S_VDMACR [3] = 1)以启用主从之间的Genlock同步。 b. 设置GenlockSrc(MM2S_VDMACR [7] = 1)以启用内部Genlock模式。如果在Vivado IDE中启用了两个通道,则默认情况下此位设置为1。设置为1时,无需在外部连接* _frame_ptr_out和* _frame_ptr_in信号。它们在内部进行内部路由。 c. 根据主帧和从帧速率在mm2s_frmdly_stride [28:24]中设置适当的值。 在这里插入图片描述Dynamic Genlock Master 配置为Dynamic Genlock Master时,该通道将跳过运行Dynamic Genlock Slave的帧缓冲区(获取Slave帧)(或重复当前帧?)。要在Dynamic Genlock Master模式下设置通道,应使用以下设置: a. 设置GenlockEn(MM2S_VDMACR [3] = 1)以启用主从之间的Genlock同步。 b. 设置GenlockSrc(MM2S_VDMACR [7] = 1)以启用内部Genlock模式。如果在Vivado IDE中启用了两个通道,则默认情况下此位设置为1。设置为1时,无需在外部连接* _frame_ptr_out和* _frame_ptr_in信号。它们在内部进行内部路由。Dynamic Genlock Slave 配置为Dynamic Genlock Slave时,获取Master帧,并输出Slave帧。要在动态同步锁相从模式下设置通道,应使用以下设置: a. 设置GenlockEn(MM2S_VDMACR [3] = 1)以启用主从之间的Genlock同步。 b. 设置GenlockSrc(MM2S_VDMACR [7] = 1)以启用内部Genlock模式。如果在Vivado IDE中启用了两个通道,则默认情况下此位设置为1。设置为1时,无需在外部连接* _frame_ptr_out和* _frame_ptr_in信号。它们在内部进行内部路由。

eg. 将Write(S2MM)通道配置为Genlock Master,将Read(MM2S)通道配置为Genlock Slave,并且Write通道的帧速率比Read通道的帧速率快。 在这里插入图片描述 eg. 写入(S2MM)通道配置为Dynamic Genlock Master和读取(MM2S)通道已配置为Dynamic Genlock Slave,写入通道帧速率比读取通道快。在动态同步锁相操作中,Master不会踩到Slave当前工作帧。Slave在Master最后完成的帧上工作。

注:一些帧错误会导致关联通道停止,必须要进行复位,而另一些则不会。

3.一些注意事项 3.1 时钟 在异步模式下,s_axi_lite_aclk时钟的频率必须低于m_axi_mm2s_aclk 和 m_axi_s2mm_aclk 。确保内存映射端时钟频率等于或大于流媒体端时钟频率,以实现所需的性能。在同步模式下,所有逻辑都在单个时钟域中运行。信号m_axi_mm2s_aclk,m_axi_s2mm_aclk,m_axis_mm2s_aclk和s_axis_s2mm_aclk必须绑定到同一源,否则会产生不确定的结果。s_axi_lite_aclk可以连接到一个较慢的时钟。AXI4-Stream支持动态更改时钟频率(m_axis_mm2s_aclk和s_axis_s2mm_clk)。m_axi_mm2s_aclk,m_axi_s2mm_aclk和s_axi_lite_aclk不支持动态频率变化。 时钟所控制的信号 3.2 复位

VDMA使用低电平有效复位输入axi_resetn。复位信号必须与s_axi_lite_aclk信号同步。每次复位时,都应保持至少十六个时钟周期。所有寄存器均复位为上电条件;所有队列都被清空;所有内部逻辑恢复上电。 VDMA还为每个通道的VDMA控制寄存器提供了软复位。通过将MM2S VDMA控制寄存器复位位设置为1或将S2MM VDMA控制寄存器复位位设置为1来发出软复位,会使相应的通道正常复位。AXI接口上的所有未决事务将完成。用VDMA控制寄存器复位一个通道不会复位另一通道。

3.3中断

每个通道(MM2S和S2MM)都有一个中断输出。如果启用了错误中断,则在发生错误时此输出将驱动为高电平。

4 编程流程 4.1 最小步骤

以下依次列出了启动AXI VDMA操作所需的最少步骤:

如果需要,将控制信息写入通道VDMACR寄存器(MM2S的偏移量0x00,S2MM的偏移量0x30)以设置中断使能,并设置VDMACR.RS = 1以启动AXI VDMA通道。将有效的视频帧缓冲区起始地址写入通道START_ADDRESS寄存器1至N,其中N等于帧缓冲区(MM2S的偏移量0x5C最高为0x98,S2MM的偏移量0xAC最高为0xE8)。如果需要,设置REG_INDEX寄存器。当AXI VDMA配置为大于32的地址空间时,每个起始地址将被编程为两个寄存器的组合,其中第一个寄存器用于指定地址的LSB 32位,而下一个寄存器用于指定MSB 32位。写入有效的帧延迟(仅对Genlock从设备有效)至FRMDLY_STRIDE寄存器(对于MM2S,偏移量0x58;对于S2MM,偏移量0xA8)。将有效的水平大小写入通道HSIZE寄存器(MM2S偏移0x54;S2MM 为0xA4)。将有效的垂直大小写入通道VSIZE寄存器(MM2S偏移0x50;S2MM为 0xA0 )。这将启动通道,传输视频数据。 4.2 一般用例

三重缓冲区可用于在两个不同的时钟域之间传递图像帧。当从内存中读取一个帧但该帧由两个不同的写帧组成时,就会发生裁剪,也就是说当读写时钟异步时,读写存储器指针将在某个时间点相互交叉。为了避免剪切,不允许读写指针相互交叉,但会导致重复或跳过某帧。

如下配置写通道寄存器。

将S2MM_VDMACR(30h)设置为8Bh。这将运行/停止Circular_Park,GenlockEn和GenlockSrc。在这种情况下,不需要帧指针的外部连接。如果需要重复使能和出错时中断,可以将该寄存器的第15位和第14位设置为1。将S2MM_Start_Address 1(ACh)至S2MM_Start_Address 3(B4h)设置为其所需位置。这些位置可以是静态的(基于最大帧大小)或动态的(基于实际帧大小)。将S2MM_FRMDLY_STRIDE(A8h)设置为适当的值。FRMDLY不适用于Dynamic Genlock Master。STRIDE是每行的字节数。将S2MM_HSIZE(A4h)设置为每行的字节数。将S2MM_VSIZE(A0h)设置为每帧的行数。必须最后设置VSIZE并启动S2MM VDMA事务。

如下配置读取通道寄存器。

将MM2S_VDMACR(00h)设置为8Bh。这将运行/停止Circular_Park,GenlockEn和GenlockSrc。在这种情况下,不需要帧指针的外部连接。如果需要错误时中断,则将该寄存器的位14置1。将MM2S_Start_Address1(5Ch)至MM2S_Start_Address 3(64h)设置为其所需的位置。这些位置应与其S2MM_Start_Address相匹配 同行。将MM2S_FRMDLY_STRIDE(58h)设置为适当的值。FRMDLY不适用于Dynamic Genlock Slaver。STRIDE是每行的字节数。将MM2S_HSIZE(54h)设置为每行的字节数。将MM2S_VSIZE(50h)设置为每帧的行数。必须最后设置VSIZE并启动MM2S VDMA事务。

更改帧大小时,传入的帧大小可能与S2MM HSIZE和VSIZE寄存器不匹配,并且导致S2MM VDMASR寄存器VDMAIntErr出现错误。前面的示例启用S2MM发生错误帧重复,并将下一帧写入同一帧存储位置,使错误帧无效。如果起始地址基于最大帧大小,则无需更改其寄存器。但是,必须使用新的帧大小来更新S2MM HSIZE和VSIZE寄存器。VSIZE应该是最后写。将完整的帧写入内存后,可以更新MM2S HSIZE和VSIZE寄存器,并在发生帧同步后将其与新帧一起使用。

注:在引擎处于启动状态时,可以随时更新视频参数设置。通过AXI4-Lite控制界面编写新的视频参数和视频起始地址来运行。在写入相应通道的垂直大小寄存器后,新写入的视频传输值在下一帧生效。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有